package controller;

import controller.dialog.Load;
import interfaces.Message;
import java.io.IOException;
import java.net.URL;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import model.TAGS;
import prjbancoimobilitariocliente.PrjBancoImobilitarioCliente;

/**
 * Controller que possui a tela de configuração do host do servidor
 * @author Adriano
 */
public class ConfiguracaoController implements Initializable {

    @FXML
    private TextField textHost;//campo para informar o host
    @FXML
    private static Label message;//label para exibir mensagens ao usuário
    
    /**implementação do listiner do button salvar*/
    public void salvar(ActionEvent event) throws IOException {
        if (validar()) {
            TAGS.SERVER_HOST = textHost.getText();
            Parent root = FXMLLoader.load(getClass().getResource("/view/jogador/Index.fxml"));
            PrjBancoImobilitarioCliente.getInstace().setStage(root);
        }
    }
    /**Implementaçõa do listener do button voltar*/
    public void voltar(ActionEvent event) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("/view/jogador/Index.fxml"));
        PrjBancoImobilitarioCliente.getInstace().setStage(root);
    }

    /**Metodo chamdo para realizar uma conexão com o servidor*/
    public void testar(ActionEvent event) {
        message.setText("");
        if (validar()) {
            Thread tc = new Thread(new TesteConexao());
            tc.start();
            Load.getLoad().getSage().show();
        }
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        textHost.setText(TAGS.SERVER_HOST);
    }

    /**Método que valida o ip do compo host*/
    private boolean validar() {
        if (textHost.getText().length() <= 8) {
            message.setText("Edereço inválido!");
            return false;
        } else {
            return true;
        }
    }

    /**Tarefa que realiza a conexão com o servidor*/
    public class TesteConexao extends Task<Void> {
        private String str = "";

        @Override
        protected Void call() throws Exception {
            try {
                Registry r = LocateRegistry.getRegistry(textHost.getText().trim(), TAGS.PORT);
                Message message = (Message) r.lookup("servidorBanco");
                str = message.testeConexao();
            } catch (Exception ex) {
                str = "Não foi possivel realizar a conexão";
            } 
            Platform.runLater(new Runnable() {
                 @Override public void run() {
                     message.setText(str);
                     Load.getLoad().getSage().close();
                 }
             });
            return  null;
        }
    }
}
